package br.com.hs.nfe.common.anotation;

import java.lang.annotation.*;

/**
 * Anotação para elementos.
 * @author Ranlive Hrysyk
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Element {

    /**
     * Nome público
     */
    String publicName();

    /**
     * Tipo de dados.
     */
    TypeEnum type();

    /**
     * Nome do campo no XML
     */
    String elementName() default AnotationConstants.CONSTANT_DEFAULT_NAME;

    /**
     * Elemento obrigatório.
     */
    boolean required() default true;

    /**
     * Tamanho mínimo para o campo.
     */
    int min() default AnotationConstants.CONSTANT_NUMERIC;

    /**
     * Tamanho máximo para o campo.
     */
    int max() default AnotationConstants.CONSTANT_NUMERIC;

    /**
     * Quantidade de casas decimais.
     */
    int decimalCount() default AnotationConstants.CONSTANT_NUMERIC;

    /**
     * Formato dos dados do campo.
     */
    String formart() default AnotationConstants.CONSTANT_UNFORMATED;

    /*
     * Tipo do campo no XML.
     */
    Class[] classType() default String.class;
    
    /**
     * Validação por tipos de documento.
     */
    DocumentTypeEnum document() default DocumentTypeEnum.UNVALIDABLE;
}
